# -*- coding:utf-8 -*-
# title           :
# description     :
# author          :Python超人/三月三提供
# date            :2024-05-01
# link            :https://gitcode.net/pythoncr/
# python_version  :3.9
# ==============================================================================
from 神笔码靓.神笔库 import 神笔绘图板, 作品输出目录
from 神笔码靓.神笔库.通用工具集 import *
from 神笔码靓.神笔库.元素库 import 文字元素
from 神笔码靓.神笔库.定义集 import *


class 地图绘图板(神笔绘图板):
    def __init__(self, 地图数据: list, 作品文件路径: str, 宽=None, 高=None):
        super(地图绘图板, self).__init__(作品文件路径=作品文件路径, 宽=宽, 高=高)
        self.地图数据 = 地图数据
        self.绘制地图()

    def 绘制地图(self):
        区域文字信息列表 = self._绘制区域线()
        self._绘制区域名称(区域文字信息列表)

    def 区域路径设置(self, 序号, 区域名称):
        return {}

    def 区域名称设置(self, 区域名称):
        return {}

    def _区域名称设置(self, 区域名称):
        设置信息 = self.区域名称设置(区域名称)
        if "区域名称" not in 设置信息:
            设置信息["区域名称"] = 区域名称
        if "描边宽度" not in 设置信息:
            设置信息["描边宽度"] = 0.05
        if "描边颜色" not in 设置信息:
            设置信息["描边颜色"] = 颜色.黑色
        if "填充颜色" not in 设置信息:
            设置信息["填充颜色"] = 颜色.白色
        if "字体大小" not in 设置信息:
            设置信息["字体大小"] = 4
        return 设置信息

    def _区域线设置(self, 序号, 区域名称):
        连线样式 = self.区域路径设置(序号, 区域名称)
        if "描边颜色" not in 连线样式:
            连线样式["描边颜色"] = 颜色.黑色
        if "描边宽度" not in 连线样式:
            连线样式["描边宽度"] = 0.2
        if "填充颜色" not in 连线样式:
            连线样式["填充颜色"] = "none"
        return 连线样式

    def _绘制区域线(self):
        区域文字信息列表 = []
        for i, 区域 in 索引列举(self.地图数据):
            点列表 = self.地图数据[区域]
            连线样式 = self._区域线设置(i, 区域)
            区域连线 = self.连线(点列表, 描边宽度=连线样式["描边宽度"], 描边颜色=连线样式["描边颜色"], 填充颜色=连线样式["填充颜色"])
            # 省连线.阴影(偏移=(0.8, 0.8), 模糊度=0.5)
            位置信息 = 区域连线.获取位置信息()
            区域文字信息列表.append((区域, 位置信息))
        return 区域文字信息列表

    def 区域文字调整(self, 区域名称:str, 区域文字元素: 文字元素, 位置信息):
        pass

    def _绘制区域名称(self, 区域文字信息列表):
        for 区域名称, 位置信息 in 区域文字信息列表:
            区域名称设置 = self._区域名称设置(区域名称)

            区域文字元素 = self.写字(x=位置信息.中心x, y=位置信息.中心y, 文字=区域名称设置["区域名称"],
                           描边颜色=区域名称设置["描边颜色"], 描边宽度=区域名称设置["描边宽度"],
                           字体大小=区域名称设置["字体大小"], 填充颜色=区域名称设置["填充颜色"])

            self.区域文字调整(区域名称, 区域文字元素, 位置信息)
